home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / gnu / glibc108.zip / glibc108 / sunrpc / svc_raw.c < prev    next >
C/C++ Source or Header  |  1994-02-06  |  4KB  |  167 lines

  1. /* @(#)svc_raw.c    2.1 88/07/29 4.0 RPCSRC */
  2. /*
  3.  * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
  4.  * unrestricted use provided that this legend is included on all tape
  5.  * media and as a part of the software program in whole or part.  Users
  6.  * may copy or modify Sun RPC without charge, but are not authorized
  7.  * to license or distribute it to anyone else except as part of a product or
  8.  * program developed by the user.
  9.  * 
  10.  * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
  11.  * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
  12.  * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
  13.  * 
  14.  * Sun RPC is provided with no support and without any obligation on the
  15.  * part of Sun Microsystems, Inc. to assist in its use, correction,
  16.  * modification or enhancement.
  17.  * 
  18.  * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
  19.  * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
  20.  * OR ANY PART THEREOF.
  21.  * 
  22.  * In no event will Sun Microsystems, Inc. be liable for any lost revenue
  23.  * or profits or other special, indirect and consequential damages, even if
  24.  * Sun has been advised of the possibility of such damages.
  25.  * 
  26.  * Sun Microsystems, Inc.
  27.  * 2550 Garcia Avenue
  28.  * Mountain View, California  94043
  29.  */
  30. #if !defined(lint) && defined(SCCSIDS)
  31. static char sccsid[] = "@(#)svc_raw.c 1.15 87/08/11 Copyr 1984 Sun Micro";
  32. #endif
  33.  
  34. /*
  35.  * svc_raw.c,   This a toy for simple testing and timing.
  36.  * Interface to create an rpc client and server in the same UNIX process.
  37.  * This lets us similate rpc and get rpc (round trip) overhead, without
  38.  * any interference from the kernal.
  39.  *
  40.  * Copyright (C) 1984, Sun Microsystems, Inc.
  41.  */
  42.  
  43. #include <rpc/rpc.h>
  44.  
  45.  
  46. /*
  47.  * This is the "network" that we will be moving data over
  48.  */
  49. static struct svcraw_private {
  50.     char    _raw_buf[UDPMSGSIZE];
  51.     SVCXPRT    server;
  52.     XDR    xdr_stream;
  53.     char    verf_body[MAX_AUTH_BYTES];
  54. } *svcraw_private;
  55.  
  56. static bool_t        svcraw_recv();
  57. static enum xprt_stat     svcraw_stat();
  58. static bool_t        svcraw_getargs();
  59. static bool_t        svcraw_reply();
  60. static bool_t        svcraw_freeargs();
  61. static void        svcraw_destroy();
  62.  
  63. static struct xp_ops server_ops = {
  64.     svcraw_recv,
  65.     svcraw_stat,
  66.     svcraw_getargs,
  67.     svcraw_reply,
  68.     svcraw_freeargs,
  69.     svcraw_destroy
  70. };
  71.  
  72. SVCXPRT *
  73. svcraw_create()
  74. {
  75.     register struct svcraw_private *srp = svcraw_private;
  76.  
  77.     if (srp == 0) {
  78.         srp = (struct svcraw_private *)calloc(1, sizeof (*srp));
  79.         if (srp == 0)
  80.             return (0);
  81.     }
  82.     srp->server.xp_sock = 0;
  83.     srp->server.xp_port = 0;
  84.     srp->server.xp_ops = &server_ops;
  85.     srp->server.xp_verf.oa_base = srp->verf_body;
  86.     xdrmem_create(&srp->xdr_stream, srp->_raw_buf, UDPMSGSIZE, XDR_FREE);
  87.     return (&srp->server);
  88. }
  89.  
  90. static enum xprt_stat
  91. svcraw_stat()
  92. {
  93.  
  94.     return (XPRT_IDLE);
  95. }
  96.  
  97. static bool_t
  98. svcraw_recv(xprt, msg)
  99.     SVCXPRT *xprt;
  100.     struct rpc_msg *msg;
  101. {
  102.     register struct svcraw_private *srp = svcraw_private;
  103.     register XDR *xdrs;
  104.  
  105.     if (srp == 0)
  106.         return (0);
  107.     xdrs = &srp->xdr_stream;
  108.     xdrs->x_op = XDR_DECODE;
  109.     XDR_SETPOS(xdrs, 0);
  110.     if (! xdr_callmsg(xdrs, msg))
  111.            return (FALSE);
  112.     return (TRUE);
  113. }
  114.  
  115. static bool_t
  116. svcraw_reply(xprt, msg)
  117.     SVCXPRT *xprt;
  118.     struct rpc_msg *msg;
  119. {
  120.     register struct svcraw_private *srp = svcraw_private;
  121.     register XDR *xdrs;
  122.  
  123.     if (srp == 0)
  124.         return (FALSE);
  125.     xdrs = &srp->xdr_stream;
  126.     xdrs->x_op = XDR_ENCODE;
  127.     XDR_SETPOS(xdrs, 0);
  128.     if (! xdr_replymsg(xdrs, msg))
  129.            return (FALSE);
  130.     (void)XDR_GETPOS(xdrs);  /* called just for overhead */
  131.     return (TRUE);
  132. }
  133.  
  134. static bool_t
  135. svcraw_getargs(xprt, xdr_args, args_ptr)
  136.     SVCXPRT *xprt;
  137.     xdrproc_t xdr_args;
  138.     caddr_t args_ptr;
  139. {
  140.     register struct svcraw_private *srp = svcraw_private;
  141.  
  142.     if (srp == 0)
  143.         return (FALSE);
  144.     return ((*xdr_args)(&srp->xdr_stream, args_ptr));
  145. }
  146.  
  147. static bool_t
  148. svcraw_freeargs(xprt, xdr_args, args_ptr)
  149.     SVCXPRT *xprt;
  150.     xdrproc_t xdr_args;
  151.     caddr_t args_ptr;
  152.     register struct svcraw_private *srp = svcraw_private;
  153.     register XDR *xdrs;
  154.  
  155.     if (srp == 0)
  156.         return (FALSE);
  157.     xdrs = &srp->xdr_stream;
  158.     xdrs->x_op = XDR_FREE;
  159.     return ((*xdr_args)(xdrs, args_ptr));
  160.  
  161. static void
  162. svcraw_destroy()
  163. {
  164. }
  165.